打开相册失败no activity found
今天看到crash列表里出现了
ActivityNotFoundException
,信息就是标题上的那些,定位之后发现是从相册选择图片处隐式启动相册找不到Activity,可能是用户的设备上没有相册应用(黑人问号)。之前的处理方式是这样
1
2
3Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RC_ALBUM);在
onActivityResult
里面是这样1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17else if (requestCode == RC_ALBUM && resultCode == RESULT_OK && data != null) {
Uri selectedImage = data.getData();
if (selectedImage != null) {
String[] filePathColumn = {MediaStore.Images.Media.DATA};
// 获取选择照片的数据视图
Cursor cursor = getContentResolver()
.query(selectedImage,filePathColumn, null, null, null);
cursor.moveToFirst();
// 从数据视图中获取已选择图片的路径
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
// 将图片显示到界面上
Bitmap bm = BitmapFactory.decodeFile(picturePath);
findViewById(R.id.rl_table).setBackground(new BitmapDrawable(bm));
}解决办法有三种,自行选择:
1、简单粗暴的方法就是判断下隐式intent有没有匹配的Activity,有再去启动,没有就给他Toast什么的吧
1 | Intent intent = new Intent(Intent.ACTION_PICK, |
2、打开内容管理器,也就是“文档”,设置查找的type为image,这玩意一般设备都有的,不过还是判断一下吧,现在看到隐式启动心里都虚的,你根本不知道你的用户是什么奇奇怪怪的设备。
1 | Intent intent = new Intent(); |
3、让用户选择用文档还是相册来打开
1 |
|
- 最后需要注意的是如果使用
ACTION_GET_CONTENT
方式打开的话,在onActivityResult中获取文件的方式和用ACTION_PICK
是不一样的,而且在安卓4.4之前和之后也是不一样的,请注意。
有个台湾友人做了个工具类,可以看看他的blog
EOF
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 七夜的小屋!